// 函数节流
// 短时间内多次触发函数调用时
// **函数在距离上一次执行的时间大于规定的时间**时执行一次
// 小于则不执行

// 使用场景
// 1. 按键按住不松手时，不希望连续多次触发事件，以免影响性能，可以使用throttle函数

/**
 * @param  {number} delay    延迟时间
 * @param  {function} action 请求关联函数，实际应用需要调用的函数
 * @return {function}        返回客户调用函数
 */
// var throttle = function (delay, action) {
//   var last = 0
//   return function () {
//     var curr = +new Date()
//     if (curr - last > delay) {
//       action.apply(this, arguments)
//       last = curr
//     }
//   }
// }

// 参考文档
// http://www.cnblogs.com/fsjohnhuang/p/4147810.html

let { throttle } = require('lodash')
let moment = require('moment')

function trigger (fn, time = 10) {
  return setInterval(fn, time)
}

function test () {
  console.log(`i am here, 现在是：${moment().format('HH:mm ss')}`)
}

let tested = throttle(test, 3000, {
  leading: true,
  trailing: true
})

let timer = trigger(tested)

console.log('开始执行trigger')
console.log(`开始执行时间：${moment().format('HH:mm ss')}`)
